;(function($) {
    DT.Desktop = function(options) {
        var _this = this;

        this.defaults = {
            // 背景图片
            background : DT.pathname + 'resources/images/desktop/background.png',

            // 背景图片显示方式：center（居中）、tile（平铺）、stretch（拉伸）
            position : 'stretch',

            // 背景颜色
            backgroundColor : 'rgba(5, 49, 98, .7)',
            
            // 桌面大小
            width  : '100%',
            height : '100%',

            // 桌面的容器，即将桌面添加到哪里，默认为document.body
            container  : document.body,

            // 页面集合，桌面模块由多个page组成，每个page结构如下
            pages : [],

            // 锁定在任务栏中的快捷方式
            eternalShortcut : [],

            /**
             * 默认的page，用此page来初始化pages
             */
            page : {
                ele          : null,         // DT.Page实例
                title        : '',           // 页面标题
                current      : true,         // 是否为当前页
                code         : 1,            // 页面的页码
                showPageCode : false,        // 是否现实页码（在左上角）
                shortcuts    : [],           // 当前页面中包含的快捷方式
                widgest      : [],           // 当前页面包含的窗口部件
                info         : []            // 当前页面的提示信息
            }
        };

        this.handler = {
            desktop        : null,           // 桌面对象，一个jquery包装过的对象
            navigatorBar   : null,           // 桌面间页切换导航条
            pagesContainer :  null,          // 页面容器，页面的切换就是对容器的移动
            pagination     : null,           // 页码
            taskbar        : null,           // 任务栏
            hacker         : null
        };

        /**
         * 初始化配置参数
         * @param o
         */
        this._ini  = function(o) {
            options = $.extend(_this.defaults, o);

            // 如果没创建页面，则默认初始化一个。
            _this.defaults.pages.length < 1 && _this.defaults.pages.push(_this.defaults.page);

            //对所有的页面排序
            _this.defaults.pages.sort(function(a, b) { return a.code - b.code; });

            return this;
        };

       // 创建桌面框架
        this._createFrame = function() {
            var handler = _this.handler;

            // 创建桌面
            handler.desktop = $('<div id="dt.desktop"></div>')
                .addClass('dt-desktop')
                .css({
                    width : options.width,
                    height : options.height
                }).appendTo(document.body);

            // 创建桌面导航条
            handler.navigatorBar = $('<div></div>').appendTo(handler.desktop).addClass('dt-desktop-navigator-bar')
                .append(handler.pagination = $('<div></div>').addClass('dt-desktop-navigator-pagination-block'))
                .append($('<div></div>').addClass('dt-desktop-navigator-ctrl-block'));

            // 创建页面容器
            handler.pagesContainer = $('<div></div>').appendTo(handler.desktop).addClass('dt-desktop-pages-container')
                .css({
                    width : options.pages.length * handler.desktop.width()
                });

            // 创建任务栏
            DT.taskbarInstance = new DT.Taskbar({ desktop : handler.desktop }).render()
            _this._loadTaskbar();

            _this._addBackground(options.backgroundColor, options.background, options.position)
                ._createNavigatorBar(options.pages)
                ._loadPages();

            return _this;
        };

        /**
         * 添加背景与背景图片
         * @param {String} backgroundColor 背景色
         * @param {String} [backgroundImage] 背景图片
         * @param {String} [position] 背景图片的显示方式：center/tile/stretch
         */
        this._addBackground = function(backgroundColor, backgroundImage, position) {
            var desktop = _this.handler.desktop;

            desktop.css({
                'background-color' : backgroundColor
            });

            switch (position.toLowerCase()) {
                // 剧中显示
                case 'center':
                    var bi = $('<img />').attr("src", backgroundImage)
                        .appendTo(desktop).bind('load', function() {
                            $(this).css({
                                'position'    : 'absolute',
                                'left'        : '50%',
                                'margin-left' : -bi.width() / 2 + 'px'
                            });
                        });

                    break;

                // 平铺显示
                case 'tile':
                    desktop.css({
                        background : 'url(' + backgroundImage + ') repeat-x 0 0'
                    });
                    break;

                // 拉伸显示（默认）
                case 'stretch':
                    $('<img />').attr("src", backgroundImage).css({
                        width  : '100%',
                        height : '100%'
                    }).appendTo(desktop);
                    break;
                default :
                    break;
            }

            return _this;
        };

        /**
         * 创建桌面导航，即用来在不同的页面中进行切换
         */
        this._createNavigatorBar = function() {
            var handler      = _this.handler,
                navigatorBar = handler.navigatorBar,
                ctrlBlock    = navigatorBar.find('.dt-desktop-navigator-ctrl-block');

            // 创建显示所有页面中图标的控制器
            $('<div></div>').addClass('dt-desktop-navigator-show-pages-btn').appendTo(ctrlBlock)
                .bind('click', function() {
                    _this._showPages($(this));
                });

            // 创建搜索控制器
            $('<div></div>').addClass('dt-desktop-navigator-search-btn').appendTo(ctrlBlock)
                .bind('click', function() {
                    _this._showSearchBar($(this));
                });
            return this;
        };

        // 加载页面
        this._loadPages = function() {
            $.each(options.pages, function(index, item) { _this._addPage(item); });
            return this;
        };

        // 加载任务栏中的快捷方式，当前打开的快捷方式在页面中去触发。
        this._loadTaskbar = function() {
            // 无加载锁定在任务栏中的图标
            $.each(options.eternalShortcut, function(index, item) {
                // 对固定在任务栏中的图标加以标识
                DT.taskbarInstance.addIcon($.extend(item, { type : 'eternal' }));
            });

            return this;
        };

        /**
         * 想页码控制器添加页码
         * @param {Number} pageInfo 页码信息
        */
        this._addCodeToPagination = function(pageInfo) {
            var pagination = _this.handler.pagination;
            pagination.css({
                width : pagination.width() + 26
            });
            $('<div></div>').addClass('dt-desktop-pagination-code')
                .addClass(pageInfo.current ? (pageInfo.ele.paging(),'dt-desktop-pagination-code-current') : '')
                .appendTo(pagination)
                .bind('click',{ pageInfo : pageInfo }, function(event) {
                    $(this).siblings().removeClass('dt-desktop-pagination-code-current')
                        .end().addClass('dt-desktop-pagination-code-current');

                    event.data.pageInfo.ele.paging();
                })
                .html(pageInfo.code);

            return this;
        };

        this._addPage = function(pageInfo /* Object */) {
            var handler = _this.handler;

            pageInfo.ele = new DT.Page($.extend(pageInfo, {
                container : handler.pagesContainer,
                desktop   : handler.desktop,
                taskbar   : DT.taskbarInstance
            })).render();

            _this._addCodeToPagination(pageInfo);

            return this;
        };

        this._showPages = function(ele) {
            return this;
        };

        this._showSearchBar = function(ele) {
            return this;
        };

        this._ini(options);
    };

    DT.Desktop.prototype = {
        /**
         * 初始化桌面模块
         * @param {Object} [options]
         */
        init : function(options) {
            this._ini(options)._createFrame();
            return this;
        },

        addPage : function(pageOptions) {
            this._addPage(pageOptions);

            return this;
        },

        // 更新所有页面，用于修正页面位置
        // 添加/修改/删除页面时都要进行此操作
        updatePages : function() {
            return this;
        }
    };
    DT.Desktop.prototype.constructor = DT.Desktop;
})(jQuery);
